当前位置:   article > 正文

Qt常用控件

qt有哪些控件

Qt常用控件

QWidget与QFrame

  • QWidget所有图形控件的基类
  • QFrame与QWidget的区别
    • QFrame是基本控件的基类, QWidget是QFrame的基类. 因此QFrame支持的方法更多一些.

QMenu与QMenuBar

  • 头文件
  1. #include <QMenuBar>//菜单栏
  2. #include <QMenu>//菜单
  3. #include <QAction>//动作
  • 构造代码
  1. //添加菜单栏
  2. QMenuBar *mBar = menuBar();
  3. //添加菜单
  4. QMenu *pFile = mBar->addMenu("文件");
  5. //添加菜单项, 添加动作
  6. QAction *pNew = pFile->addAction("新建");
  7. //连接到对应槽函数
  8. connect(pNew, &QAction::triggered, [](){});
  9. //添加分割线
  10. pFile->addSeparator();
  11. //创建一个菜单文本为“保存(&S)”并且Ctrl+S为键盘快捷键的“文件保存”操作。
  12. fileSaveAction = new QAction( "Save File", QPixmap( filesave),"&Save", CTRL+Key_S, this, "save" );
  13. //连接到对应槽函数
  14. connect( fileSaveAction, SIGNAL( activated() ) , this, SLOT( save() ) );

QToolBar

  • 头文件
  1. #include <QToolBar>
  2. #include <QPushButton>
  • 构造代码
  1. //添加工具栏
  2. QToolBar *toolBar = addToolBar("toolBar");
  3. //把上面菜单栏定义的指针直接拿过来就添加到工具栏了.
  4. toolBar->addAction(pNew);
  5. //定义其他文字或图片工具栏按钮
  6. QPushButton *b = new QPushButton(this);
  7. b->setText("^_^");
  8. //按下工具栏按钮, 笑脸变成123
  9. connect(b, &QPushButton::clicked, [](){b->setText("123");});

QStatusBar

  • 头文件
  1. #include <QStatusBar>
  2. #include <QLabel>//显示控件
  • 构造代码
  1. QStatusBar *sBar = statusBar();
  2. QLabel *label = new QLabel(this);//新建标签
  3. label -> setText("hello");//设置标签显示内容
  4. sBar -> addWidget(label);//将标签添加至状态栏

核心控件(工作区控件)

  • 代码
  1. //将QTextEdit设置为核心控件
  2. this->setCentralWidget(new QTextEdit);

QDockWidget

  • 头文件
#include <QDockWidget>
  • 创建代码
  1. //创建浮动窗口
  2. QDockWidget *dock = new QDockWidget(this);
  3. //将浮动窗口显示在窗口右边
  4. addDockWidget(Qt::RightDockWidgetArea, dock);
  5. //创建一个编辑框
  6. QTextEdit *textEdit = new QTextEdit(this);
  7. //将编辑框放到浮动窗口里
  8. dock->setWidget(textEdit);

QDialog

  • 对话框如果申请了堆区内存, 关闭时是不进行释放的, 只有程序结束才释放. 可通过以下属性设置对话框关闭时即释放内存
  1. QDialog *p = new QDialog;
  2. p->setAttribute(Qt::WA_DeleteOnClose);

QMessageBox

  • 头文件
#include <QMessageBox>
  • 关于
  1. //参数:指定父窗口, 标题, 内容
  2. QMessageBox::about(this, "about", "关于qt");
  • 问题
  1. //参数:指定父窗口, 标题, 问题, 返回选择结果
  2. int ret = QMessageBox::question(this, "question", "是否关闭?");
  3. switch(ret)
  4. {
  5. case QMessageBox::Yes:
  6. qDebug()<<"你选择了yes";
  7. break;
  8. case QMessageBox::No:
  9. qDebug()<<"你选择了no";
  10. break;
  11. default:
  12. break;
  13. }
  14. //第四个参数可以指定显示的选项
  15. ret = QMessageBox::question(this, "question", "是否关闭?", QMessageBox::Ok|QMessageBox::Cancel);

QFileDialog

  • 头文件
#include <QFileDialog>
  • 使用
  1. //参数:指定父窗口, 标题, 路径. 返回字符串为文件路径.
  2. QString path = QFileDialog::getOpenFileName(this, "open", "../");
  3. //最后一个参数可以设定可选文件类型.
  4. path = QFileDialog::getOpenFileName(this, "open", "../", "souce(*.cpp *.h);;Text(*.txt);;all(*.*)");
  • 打开多个文件(getOpenFileNames)时, 返回QStringList

Qlabel

  • 属性
    • pixmap属性设置图片(直接选时是相对路径)
    • scaledContents自动填充
  • Qt相对路径问题
    • 编译运行时, 相对路径为makefile
  • 为避免相对路径带来的问题, 可以使用资源文件, 也可以采用获取exe文件相对路径的方式.
  • 资源文件添加方法:
    1. 在工程里将需要用到的图片放到集中的文件夹.
    2. 添加Qt Resource File, 设置一个文件名
    3. 在*.qrc上双击或者"open in editor"菜单
    4. 添加-添加前缀
    5. 添加资源文件
    6. 编译保存一下
    7. 此后编译出的可执行文件包含资源文件, 因此大一些

QLineEdit

  • 设置边框颜色和圆角
setStyleSheet(QString("border:1px solid;border-radius:2px;border-color:rgb(120, 120, 120);border-width:1px;")
  • 设置左边留白
setTextMargins(8, 0, 0, 0);

QScrollArea

  • 自定义竖直下拉滚动条
    • 设置圆角并隐藏上下的三角符号
  1. CScrollArea::CScrollArea(QWidget *parent): QScrollArea(parent)
  2. {
  3. setStyleSheet("QScrollArea{border:0;padding:0;}");//设置下拉滚动条影响范围的区域边框为0
  4. verticalScrollBar()->setStyleSheet(
  5. "QScrollBar{margin: 0px;background:transparent; width: 6px;height:30px; min-width:6; min-height:30}"//设置下拉滚动条背景宽度6高度30无边框背景透明
  6. "QScrollBar::handle{background:#c0c0c0; border:0; height:40;min-height:40;border-radius:3px;}"//设置滚动条颜色#c0c0c0无边框最小高度40圆角3px
  7. "QScrollBar::handle:hover{background:gray; border:0;}"//设置鼠标徘徊颜色为灰色边框0
  8. "QScrollBar::sub-line{background:transparent;width:0px;height:0px;border:0;}"//设置下拉滚动条上拉三角为0
  9. "QScrollBar::add-line{background:transparent;width:0px;height:0px;border:0;}"//设置下拉滚动条下拉三角为0
  10. );
  11. }
  • 给QScrollArea影响区域加外框
    • 如果想把滚动条区域框起来, 应该将以上控件放入一个QWidget, 设置QWidget的边框和颜色, 并设置其不影响滚动条局域, 可以设置QWidget子控件不继承其Style属性. 下面代码中 #widgetOut表示该设置仅对这个控件生效
     ui.widgetOut->setStyleSheet("QWidget #widgetOut{border:1px solid;border-color:#e6e6e6;padding:0;}");

QCheckBox

  • 使用自定义图片的CheckBox
  1. setStyleSheet(QString("QCheckBox::indicator:unchecked { image: url(%1);}").arg("/checkbox/unchecked.png") +
  2. QString("QCheckBox::indicator:unchecked:hover {image: url(%1);}").arg("/checkbox/uncheckedHover.png") +
  3. QString("QCheckBox::indicator:checked {image: url(%1);}").arg( "/checkbox/checked.png") +
  4. QString("QCheckBox::indicator:checked:hover {image: url(%1);}").arg("/checkbox/checkedHover.png") +
  5. QString("QCheckBox::indicator:indeterminate {image: url(%1);}").arg("/checkbox/partiallyChecked.png") +
  6. QString("QCheckBox::indicator:indeterminate:hover {image: url(%1);}").arg("/checkbox/partiallyCheckedHover.png") +
  7. QString("QCheckBox::indicator:unchecked:disabled {image: url(%1);}").arg("/checkbox/disable.png"));

QTableWidget

  • 自定义QTabelWidget各风格
  1. //first example
  2. pWindow->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //去掉水平滚动条
  3. pWindow->verticalHeader()->setVisible(false); //设置垂直头不可见
  4. pWindow->setFrameShape(QFrame::NoFrame); //设置无边框
  5. pWindow->setSelectionBehavior(QAbstractItemView::SelectRows); //一次选择一行
  6. //设置选中行的背景色
  7. pWindow->setStyleSheet("selection-background-color:#e5e5e5;selection-color:#666666;background-color:#ffffff;color:#666666;");
  8. pWindow->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑
  9. pWindow->horizontalHeader()->setHighlightSections(false); //点击表时不对表头行光亮(获取焦点)
  10. //设置表头不可拖动
  11. pWindow->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
  12. pWindow->horizontalHeader()->setSectionsClickable(false); //禁止表头点击
  13. //设置表头字体,颜色
  14. pWindow->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:#f7f7f7;border:1px solid #e5e5e5;}");
  15. pWindow->horizontalHeader()->setFixedHeight(40); //设置表头的高度
  16. LL::SetVerticalScrollbar(pWindow->verticalScrollBar()); //设置垂直滚动条风格
  17. pWindow->setItemDelegate(new CNoFocusDelegate()); //设置鼠标行时,不显示单元格虚框
  18. pWindow->setSelectionMode(QAbstractItemView::SingleSelection); //设置只允许选择一行
  19. //设置表头字体
  20. QFont font = pWindow->horizontalHeader()->font();
  21. font.setBold(false);
  22. font.setPixelSize(12);
  23. pWindow->horizontalHeader()->setFont(font);
  1. //Second Example
  2. ui.tableWidget->setRowCount(6); //设置6
  3. ui.tableWidget->setColumnCount(3); //设置3
  4. ui.tableWidget->verticalHeader()->hide(); //隐藏垂直表头
  5. ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏水平滚动条
  6. ui.tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏垂直滚动条
  7. ui.tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); //禁止竖直滚动
  8. ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //禁止水平滚动
  9. ui.tableWidget->setColumnWidth(0, 182); //添加一列
  10. ui.tableWidget->setColumnWidth(1, 173); //添加一列
  11. ui.tableWidget->setColumnWidth(2, 135); //添加一列
  12. //======table header set======
  13. ui.tableWidget->horizontalHeader()->setMinimumHeight(35); //水平表头高度
  14. ui.tableWidget->horizontalHeader()->setDisabled(true); //设置不可编辑
  15. ui.tableWidget->horizontalHeader()->setSectionsClickable(false); //设置不可点击
  16. QFont font("Segoe UI", -1, 50);
  17. font.setPixelSize(15)
  18. ui.tableWidget->horizontalHeader()->setFont(font); //设置表头字体
  19. ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color: rgb(255, 255, 255);" //背景色
  20. //"border-radius:0px;"
  21. "border:0;" //表头边框
  22. "min-height:29px;}" //最小高度
  23. );
  24. ui.tableWidget->horizontalHeader()->setSectionsMovable(false); //关闭列宽调整
  25. QStringList header;
  26. header << tr("First Title") << tr("Second Title") << tr("Thread Title"); //表头内容
  27. ui.tableWidget->setHorizontalHeaderLabels(header); //加载表头内容
  28. //===Content set===
  29. ui.tableWidget->setFrameShape(QTableWidget::NoFrame); //设置无边框
  30. ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止编辑
  31. ui.tableWidget->setStyleSheet(
  32. "gridline-color:rgb(255,255,255);" //分割线颜色
  33. "background:white;" //背景色
  34. "color:#666666;" //字体颜色
  35. "selection-background-color:rgb(255,255,255);" //选中背景色
  36. "selection-color:rgb(60,60,60);" //选中字体颜色
  37. );
  38. ui.tableWidget->setFont(font); //设置字体
  39. ui.tableWidget->setItem(0, 0, new QTableWidgetItem(tr("1 horizon header"))); //内容设置
  40. ui.tableWidget->setItem(1, 0, new QTableWidgetItem(tr("2 horizon header")));
  41. ui.tableWidget->setItem(2, 0, new QTableWidgetItem(tr("3 horizon header")));
  42. ui.tableWidget->setItem(3, 0, new QTableWidgetItem(tr("4 horizon header")));
  43. ui.tableWidget->setItem(4, 0, new QTableWidgetItem(tr("5 horizon header")));
  44. ui.tableWidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //居中设置
  45. ui.tableWidget->item(1, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  46. ui.tableWidget->item(2, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  47. ui.tableWidget->item(3, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  48. ui.tableWidget->item(4, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  49. //======Photo loadding===========
  50. std::vector<QLabel *> label;
  51. label.clear();
  52. QLabel *label_N = new QLabel();
  53. label_N->setPixmap(QPixmap("../no.png"));
  54. label_N->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  55. for (int i = 0; i < 9; ++i)
  56. {
  57. QLabel *label_Y = new QLabel();
  58. label_Y->setPixmap(QPixmap(strPath + "../yes.png"));
  59. label_Y->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  60. label.push_back(label_Y);
  61. }
  62. if ((label.size() > 9) || (label.size() == 9))
  63. {
  64. ui.tableWidget->setCellWidget(0, 1, label.at(0));
  65. ui.tableWidget->setCellWidget(1, 1, label.at(1));
  66. ui.tableWidget->setCellWidget(2, 1, label.at(2));
  67. ui.tableWidget->setCellWidget(3, 1, label.at(3));
  68. ui.tableWidget->setCellWidget(0, 2, label.at(4));
  69. ui.tableWidget->setCellWidget(1, 2, label.at(5));
  70. ui.tableWidget->setCellWidget(2, 2, label.at(6));
  71. ui.tableWidget->setCellWidget(3, 2, label.at(7));
  72. ui.tableWidget->setCellWidget(4, 2, label.at(8));
  73. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/561492
推荐阅读
相关标签
  

闽ICP备14008679号