coding
unsky
deepdim
thought

QT5从入门到放弃:(5)标准对话框

Qt提供了丰富的标准对话框,全部继承自QDialog类,并且加入了自己的特色。

中文问题note:

1
2
3
这里使用了qt5+msvc2013编译器,对于中文乱码问题,可以直接在cpp文件中加入,
#pragma execution_character_set("utf-8")
即可直接输入汉字。

我们挨个实验一下标准对话框:

颜色对话框

在设计师界面加入一个新的
push button
右键转到槽之后加入代码:
首先调用头文件

1
#include<QColorDialog>

加入代码:

1
2
3
4
5
void MYDialog::on_pushButton_clicked()
{
QColor color=QColorDialog::getColor(Qt::red,this,"颜色");
qDebug()<<"颜色:"<<color;
}

其中队中color返回的 (ARGB alpha,red,green,blue) alpha是透明度1.0完全不透明,alpha 0.0是完全透明。 R G B用0~255的数值进行表示。
我们也可以分步的进行:

1
2
3
4
5
6
7
8
9
void MYDialog::on_pushButton_clicked()
{
QColorDialog dia(Qt::red,this);//初始颜色和父窗口
dia.setWindowTitle("挑选喜欢的颜色");
dia.setOption(QColorDialog::ShowAlphaChannel);//显示alpha
dia.exec();
// QColor color=QColorDialog::getColor(Qt::red,this,"爱国者导弹");
// qDebug()<<"颜色:"<<color;
}

文件对话框

新建一个push button 右键转到槽 引入头文件QFontDialog

1
2
3
4
5
6
void MYDialog::on_pushButton_2_clicked()
{
QString filename=QFileDialog::getOpenFileName(this,"选择文件","C:","(*png)");
qDebug()<<filename;
}

对于不同类型的文件可以使用:

1
QString filename=QFileDialog::getOpenFileName(this,"选择文件","C:","图片(*png);;文本(*txt)");

这里只可以选择一个文件,如果要选择多个文件可以使用:

1
2
3
4
5
6
void MYDialog::on_pushButton_2_clicked()
{
QStringList filename=QFileDialog::getOpenFileNames(this,"选择文件","C:","图片(*png);;文本(*txt)");
qDebug()<<filename;
}

QStringList 可以存储多个字符串,getOpenFileNames可以选择多个文件并返回名字。

字体对话框

新建一个push button 之后右键转到槽:

1
2
3
4
5
6
7
void MYDialog::on_pushButton_3_clicked()
{ bool ok;
QFont font= QFontDialog::getFont(&ok,this);
if(ok) this->setFont(font);
else qDebug()<<"没有选择字体";
}

对于给固定的窗口选择字体可以使用,ui->pushButton_3->setFont(front);在这里对this窗口进行设置字体,会使窗口上的所有按钮字体改变。

输入对话框

新建push Button 之后 引入头文件QInputDialog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void MYDialog::on_pushButton_4_clicked()
{ bool ok;
QString str=QInputDialog::getText(this,"输入字符串对话框","请输入用户名",QLineEdit::Normal,"admin:",&ok);
if(ok) qDebug()<<str;
else qDebug()<<"没有输入";
int val= QInputDialog::getInt(this,"整数输入","请输入整数",300,200,500,100,&ok);
if(ok) qDebug()<<val;
double val_double=QInputDialog::getDouble(this,"double","输入",-100,-500,4000,5,&ok);
if(ok) qDebug()<<val_double;
QStringList strs;
strs<<"条目一"<<"战士";
QString str2=QInputDialog::getItem(this,"目录","s卷积",strs,0,1,&ok);
}

在这里总共包括 getText函数输入字符串,getInt输入整数 getDouble输入双精度数。getItem输入条目。
在输入条目中可以使用一个 QStringList 类型的字符串进行选择。

消息对话框

新建push Button右键转到槽,包含头文件QMessageBox

1
2
3
4
5
6
7
8
9
10
11
12
13
void MYDialog::on_pushButton_5_clicked()
{ int val= QMessageBox::question(this,"请回答","你是谁?",QMessageBox::Yes,QMessageBox::No);
if (val==QMessageBox::No) qDebug()<<"你真笨";
int val2=QMessageBox::information(this,"about","niha ",QMessageBox::Ok);
if(val2==QMessageBox::Ok) qDebug()<<"urhgi";
int val3=QMessageBox::warning(this,"警告","会有,计划规划",QMessageBox::Abort);
if (val3==QMessageBox::Abort) qDebug()<<"关于i";
int val4=QMessageBox::critical(this,"错误","这是一个很严重的错误",QMessageBox::YesAll);
if(val4==QMessageBox::YesAll) qDebug()<<"haha";
QMessageBox::about(this,"关于","uhgthtuirhytrini2016/12/9");
}

在这里包含,question informarion warning critical和about五个函数。
同时可以使用:

1
2
3
4
5
6
符号 编号
QMessageBox::Yes 16384
QMessageBox::No 65536
QMessageBox::Ok 1024
QMessageBox::Abort 262144
QMessageBox::YesAll 32768

对应的数字使QMessageBox内置的编号.

进度条

新建push Button 右键转到槽 引入头文件QProgressDialogsses

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void MYDialog::on_pushButton_6_clicked()
{
QProgressDialog pd("进度","jiyhui",0,90000,this);
pd.setWindowTitle("nihighi");
pd.setModal(true);
for(int i=0;i<90000;i++)
{pd.setValue(i);
QCoreApplication::processEvents();
if(pd.wasCanceled()) break;
}
pd.setValue(900000);
qDebug()<<"结束";
}

在这里将其设为模态,使用setValue显示进度,processEvents()用于避免界面被冻结。使用wasCanceled()判断其是否被取消
在最后需要显示最后一个值进行setValue()完成不然只会99%的进度。

错误消息对话框

新建push Button 右键转到槽,引入头文件QErrorMessage

1
2
3
4
5
6
void MYDialog::on_pushButton_7_clicked()
{
QErrorMessage *EM=new QErrorMessage(this);
EM->setWindowTitle("错误");
EM->showMessage("这是一个很严重的错误");
}

在这里使用new的方式建立非模态对话框。在这个对话框中有一个默认的选项,show this message again,的复选框。

向导对话框

对于引导页面,首先需要新建引导页,在mydialog.h中引入#include,并声明需要使用的页面:

1
2
3
4
5
private:
Ui::MYDialog *ui;
QWizardPage *createpage1();
QWizardPage *createpage2();
QWizardPage * createpage3();

在这里声明了三个页面函数。单击函数右键选择跳转到定义,在mydialog.cpp中
定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
QWizardPage *MYDialog::createpage1()
{
QWizardPage * page=new QWizardPage;
page->setTitle("介绍");
return page;
}
QWizardPage *MYDialog::createpage2()
{QWizardPage * page=new QWizardPage;
page->setTitle("卡特飞学术论坛");
return page;
}
QWizardPage *MYDialog::createpage3()
{
QWizardPage * page=new QWizardPage;
page->setTitle("结束");
return page;
}

即完成了三个页面函数的定义。

之后开始使用按钮进行关联。
新建push Button 右键转到槽 并引入 QWizard

1
2
3
4
5
6
7
8
9
10
11
void MYDialog::on_pushButton_8_clicked()
{
QWizard q(this);
q.setWindowTitle("智能向导");
q.addPage(createpage1());
q.addPage(createpage2());
q.addPage(createpage1());
q.addPage(createpage3());
q.exec();
}














坚持原创技术分享,您的支持将鼓励我继续创作!