记录自己学习qt之路的一点一滴。
在弄清楚qt如何创建对话框(Qt快速设计对话框(控件属性)-designer(1),Qt快速设置对话框(部件布局)-designer(2)),并且设置布局之后,想要有的时候可以能够设计改变形状的对话框,在qt中最常见的可改变形状的对话框有:扩展对话框、多页对话框。
以下是扩展对话框的格式:
点击More按钮之前
点击More按钮后
这种形式的对话框无论是使用代码,还是使用qt设计师,都可以快速实现。以下是如何通过代码和设计师一起实现扩展对话框的步奏:
1.创建如下图的对话框
Qt快速设计对话框(控件属性)-designer(1)
(1)单机File->New form,创建”Dialog without Buttons" 模板
(2)创建OK按钮、Cancel按钮、More按钮,设置其objectName分别为okButton、cancelButton、moreButton,在cancel按钮和more按钮之间加入垂直分隔符
(3)设置moreButton属性text为‘&More’,加‘&’符原因请看之前第二篇博客,设置checkable属性为‘true’
(4)创建群组对话框,两个标签、两个组合框、和一个水平分隔符
(5)设置群组对话框title属性为‘&Primary Key’,第一个标签text属性设置为‘Column’,第三个标签text属性设置为‘Order’
(6)双击第一个组合框,添加第一个item项‘None’,第二个组合框添加item‘Ascending’和‘Desc-ending’项。
2.设置对话框布局
Qt快速设置对话框(部件布局)-designer(2)
(1)按住Ctrl键依次点击ok按钮、cancel按钮、水平分隔符,more按钮,然后设置垂直布局
(2)点击群组框,然后点击栅格布局,再点击设置适应大小
3.设置扩展对话框
(1)下拉对话框,设置窗口足够高,以便能够容下剩下两个部分
(2)复制群组框,并分别设置群组框title属性为‘&Secondary Key’和‘&Tertiary Key’
(3)创建垂直分隔符,放在图下位置
(4)分别设置组合框obectName为primaryColumnCombo、primaryOrderCombo、SecondaryColumnCombo、SecondaryOrderCombo、TertiaryColumnCombo、TertiaryOrderCombo
4.设置布局
(1)窗口objecname设置未‘SortDialog’,title属性设置为‘Sort’
(2)设置窗口进行栅格布局
(3)设置两个垂直分隔符sizeHint属性为【20,0】
这个时候最终的网格布局一共4行2列
5.设置tab顺序
6.设置连接模式
(1)单击Edit->Edit signals/slots,进入Qt设计师设置连接模式
(2)第一个连接设置okbutton和窗口accept槽,如下图所示。从对话框中选择信号clicked(),槽函数选择accept()
(3)设置moreButton连接secondaryGroupBox群组框,选择toggled(bool)为信号,选择setVisible(bool)为槽函数,这个信号和槽需要点击配置连接下方显示才能够看的到
(4)如下图设置完成
7.编辑代码
新增sortdialog.h和sortdialog.cpp文件,代码分别如下:
sortdialog.h
#ifndef SORTDAIALOG_H
#define SORTDAIALOG_H
#include "ui_dialog.h"
#include <QDialog>
class SortDialog : public QDialog, public Ui::SortDialog
{
Q_OBJECT
public:
SortDialog(QWidget* parent = 0);
void setColumnRange(QChar first, QChar last);
};
#endif // SORTDAIALOG_H
sortdialog.cpp
#include "sortdialog.h"
#include <QtGui>
SortDialog::SortDialog(QWidget* parent) : QDialog (parent)
{
setupUi(this);
SecondaryGroupBox->hide();//隐藏
TertiaryGroupBox->hide();//隐藏
layout()->setSizeConstraint(QLayout::SetFixedSize);//自动适应大小
setColumnRange('A', 'Z');//设置组合框成员
}
void SortDialog::setColumnRange(QChar first, QChar last)
{
PrimaryColumnCombo->clear();
SecondaryColumnCombo->clear();
TertiaryColumnCombo->clear();
SecondaryColumnCombo->addItem("None");
TertiaryColumnCombo->addItem("None");
PrimaryColumnCombo->setMinimumSize(SecondaryColumnCombo->sizeHint());
QChar ch = first;
while(ch <= last)
{
PrimaryColumnCombo->addItem(QString(ch));
SecondaryColumnCombo->addItem(QString(ch));
TertiaryColumnCombo->addItem(QString(ch));
ch = ch.unicode() + 1;
}
}
main中进行显示
#include <QApplication>
#include <sortdialog.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
SortDialog* dialog = new SortDialog;
dialog->setColumnRange('C', 'F');
dialog->show();
return a.exec();
}
就完成了
8.问题一、没有生成’ui_dialog.h‘头文件
如果编译没有生成’ui_dialog.h‘头文件,可能是项目属性中没有设置好,网上说,原因是xx.ui文件没有被mic.exe编译暂时先查查这个是不是设置了。
9.问题二、找不到 Ui::SortDialog类
看一下是否是如此原因Qt Designer设置UI objectname属性