1.QPushbutton和QToolButton的关联和区别:
1.关联:都是按钮,都可以通过信号槽来控制点击事件的触发。
2.区别:toolbutton更特殊一点,可以配置快捷键触发槽,一般只用图片做按钮配置放在toolbar内,就像下图编辑界面的功能选项,用toolbutton就很简单。
下面是用toolbutton实现的一个按钮,本次选择toolbutton的原因是因为想把文字显示在图标下面很容易实现。
ui->ToolBtn_one->setGeometry(10,30,100,100);
ui->ToolBtn_one->setIcon(QIcon(":/logo/images/1.jpg"));
ui->ToolBtn_one->setIconSize(QSize(46,46));
ui->ToolBtn_one->setText(QString::fromLocal8Bit("主控载荷"));
ui->ToolBtn_one->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
效果如下:
2.QMenu 可以配合QPushbutton做个下拉菜单
new一个pushbutton,new一个QMenu,new几个QAction,将action的对象加入menu的对象,
将这个pushbutton对象设置为菜单形式,代码如下:
QPushButton *P_SetMenuBtn = new QPushButton(this);
P_SetMenuBtn->setGeometry(460,30,100,30);
P_SetMenuBtn->setText("摇杆选择");
P_menu = new QMenu(this);
P_maincontrol = new QAction("主控",this);
p_wrjzh = new QAction("无人机",this);
p_robot = new QAction("机器人",this);
P_menu->addAction(P_maincontrol);
P_menu->addAction(p_wrjzh);
P_menu->addAction(p_robot);
P_SetMenuBtn->setMenu(P_menu);
效果如下:
3.点击按钮的功能,toolbutton主题是用ui画的,直接转到槽编写想要实现的功能
比如我想要实现的是打开一个linux终端:
ui->ToolBtn_one->setEnabled(false);
ui->ToolBtn_two->setEnabled(true);
ui->ToolBtn_three->setEnabled(true);
QString cmd = "gnome-terminal \n";
QProcess start_one;
start_one.setProcessChannelMode(QProcess::MergedChannels);
start_one.start("bash");
start_one.write(cmd.toUtf8());
start_one.waitForBytesWritten();
start_one.waitForFinished();
start_one.closeWriteChannel();
QString output = start_one.readAll();
qDebug()<<"output"<<output;
4.pushbutton是new出来的,实现一个点击弹出messagebox的功能,需要connect信号和槽。
1.信号和槽:qt的这个功能基本就是对c++回调函数的封装,使用起来比回调函数更方便,但是牺牲一些性能,会更慢一点。connect的参数我是这么理解的:谁,发出什么信号,想让谁,实现什么功能。它也有第五个参数,是信号和槽的连接方式,一般默认缺省。比如信号和槽不在一个线程中,需要事件循环接受信号,那么默认参数就应是Queuedconnection,这里不细说了。
2.此次是实现点击menu下的action后进行一个弹窗功能,代码如下:
connect(P_maincontrol,&QAction::triggered,this,&MainWindow::do_maincontrol);
void MainWindow::do_maincontrol()
{
QMessageBox::information(this," ","这是主控遥感");
emit ZHchaged();
}
本次就先介绍到这,qt的ui设计并不难。建议把想要展示是什么和具体的类能对应起来就好了,实际开发的时候可以去看对应的qt开发手册。
版权声明:本文为jhonsss原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。