一、QT的Ui设计框架
1.1UI文件到底做了什么?
ui‐>setupUi(this);
1.2从Qt设计器中窥视Qt的继承关系
1.3添加progressBar到stateBar
观察QtCreator发现状态栏中有个进度条
showMessage 状态显示文字
ui‐>statusBar‐>showMessage("message", 2000);
ui‐>statusBar‐>showMessage("message2");
//addPermanentWidget状态栏条件widget
QProgressBar *pStateProgressBar=new QProgressBar(this);
ui‐>statusBar‐>addPermanentWidget(pStateProgressBar);
pStateProgressBar‐>setValue(55);
pStateProgressBar‐>setAlignment(Qt::AlignCenter);
二、Containers
2.1groupBox
QGroupBox为构建分组提供了支持,通常包含一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。
2.2scrollArea
QScrollArea提供了一个滚动视图到另外一个部件,滚动区域用于显示一个画面中的子部件内容。如果部件超过画面大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。
以notepad为例
UI属性设置
添加一个带图片的Label
QLabel *pImageLabel=new QLabel(this);
pImageLable‐>setPixmap(QPixmap(":/pic/image/png/poster.png"));
ui‐>scrollArea‐>setWidget(pImageLable);
2.3toolBox
QToolBox类提供了一个选项卡的条目。QToolBox可以在一个tab列上显示多个Item,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的
item是一个QWidget
QQ 联系人就是toolBox.
ui属性
添加Item
2.4tabWidget
QTabWidget类提供了一系列的Tab选项卡的切换,每个选项卡下有自己的控件,原理同toolBox一样
WPS上方一排就是TabWidget
ui属性
2.5stackedWidget
QStackedWidget理解为层叠窗口(堆栈窗口),提供了多页面切换的布局,每个选项卡下都有自己的控件, QStackedWidget类提供了多页面切换的布局,一次只能看到一个 界面。
还是以WPS为例:
还是以QtCreate为例
使用代码实现页面的切换:
void MainWindow::on_pushButton_page1_clicked()
{
ui‐>stackedWidget‐>setCurrentIndex(0);
}
void MainWindow::on_pushButton_page2_clicked()
{
ui‐>stackedWidget‐>setCurrentIndex(1);
}
void MainWindow::on_pushButton_page3_clicked()
{
ui‐>stackedWidget‐>setCurrentIndex(2);
}
2.6 qFrame
QFrame类是带有边框的部件的基类。它的子类有我们最为常见的标签QLabel,另外还有QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类。 带边框部件最主要的特点就是可以有一个明显的边界框架。QFrame类的主要功能也 就是用来实现不同的边框效果,这主要是由边框形状(Shape)和边框阴影(Shadow)组合来形成的。
2.7 qWidget
QWidget类是所有用户界面对象的基类,被称为基础窗口部件,它可以作为其他部件
的容器。QWidget继承自QObject类和QPaintDevice类,其中QObject类是所有支持Qt 对象模型(Qt Object Model)的Qt对象的的基类,QPaintDevice类是所有可以绘制的 对象的基类。
2.8 mdiArea
QMdiArea一般使用于主窗口中,用于容纳多个子窗口:
添加子窗口
2.9DockWidget
QDockWidget类;理解为悬浮(停靠)窗口,提供了一个特殊的窗口部件,它可以是被
锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。
只能使用Minwindow类才有
可以放在四个区域 官方有个很好的Demo
2.10 axWidget
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中
使用ActiveX控件,并且也开发基于Qt的ActiveX控件。 QAxContainer不包含在QtCore里面,所以要使用QAxContainer的话还必须要在.pro文 件中添加 CONFIG+=qaxcontainer不能跨平台,谨慎使用!
3、Item Widget
3.1 ListWidget
QListWidget类列表框控件用来加载并显示多个列表项。QListWidgetItem类就是列表
项类。
UI属性 UI添加Item方法:
双击可以进入编辑item界面
可以单独控制某一个Item属性
重点属性:能不能被编辑 flags>Editable
代码添加Item方法:
ui‐>listWidget‐>addItem("Item_1");
for(int i = 0; i < 9; i ++)
{
ui‐>listWidget‐>addItem(QString::number(i) + " item
here");
}
四、标准对话框
4.1 标准消息对话框
标准警告对话框
void Widget::on_pushButtonCirticalMessage_clicked() {
QMessageBox::StandardButton reply;
reply = QMessageBox::critical(this, QString::fromLocal8Bit("标准警告对话框"),
QString::fromLocal8Bit("这里填写需要警告的内容"), QMessageBox::Abort |
QMessageBox::Retry | QMessageBox::Ignore);
//使用reply 接住用户的选择
if (reply == QMessageBox::Abort)
ui‐>lineEditCritical‐>setText(tr("Abort"));
else if (reply == QMessageBox::Retry)
ui‐>lineEditCritical‐>setText(tr("Retry"));
else
ui‐>lineEditCritical‐>setText(tr("Ignore")); }
解决上面的 ico更改 文字更改
QMessageBox msgBox;
msgBox.setText(QString::fromLocal8Bit("该文档已经被修改"));
msgBox.setInformativeText(QString::fromLocal8Bit("是否需要保 存?"));
msgBox.setStandardButtons(QMessageBox::Save
| QMessageBox::Discard
| QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
msgBox.setButtonText (QMessageBox::Save, QString::fromLocal8Bit("保 存"));
msgBox.setButtonText (QMessageBox::Discard, QString::fromLocal8Bit("丢 弃"));
msgBox.setButtonText (QMessageBox::Cancel, QString::fromLocal8Bit("取 消"));
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
ui‐>lineEditCustom‐>setText(QString::fromLocal8Bit("保 存"));
break;
case QMessageBox::Discard:
ui‐>lineEditCustom‐>setText(QString::fromLocal8Bit("丢 弃"));
break;
case QMessageBox::Cancel: ui‐>lineEditCustom‐>setText(QString::fromLocal8Bit("取
消"));
break;
}
标准对话框QFileDialog 标准颜色对话框 QColorDialog 标准字体对话框QFontDialog 标准输入对话框 QInputDialog