1. Qt ToolBar工具栏里同时显示图标和文字
Qt默认情况下(Qt版本5.13),工具栏添加Action后,只显示Action的图标,如下图所示
这种界面不方便操作,最好在工具栏添加文字,添加文字方式(在构造函数中添加)为:
ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);此种方式为文字显示在图标右侧,如图所示:
ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);此种方式为文字显示在图标下面,如图所示
此函数还可以设置其他参数,如Qt::ToolButtonIconOnly(缺省值),只显示图标;Qt::ToolButtonTextOnly ,只显示文字等
2. QListWIdget 删除Item会报错的原因和解决办法
尝试了好几种删除方法:
1、 int cnt = ui->listWidget_showfile_right->count();
for(int i = 0; i < cnt; ++i)
{
QListWidgetItem *aItem = ui->listWidget_showfile_right->takeItem(0); //获取一个项
delete aItem;
} //此方法删除到最后一个的时候报上述错误
2、 ui->listWidget_showfile_right->clear();
有解释说:
removeitemwidet只是删除该item对应的widget,不会删除该item,如果这个item有Qstring,该qstring会保留下来;
takeitem直接删除该item;
clear函数清除所有的item。
不管怎么删除都失败,最后终于找到了原因!!!!!!!!!!!!
当QListWidget中存在 信号和某个槽函数链接在一起的时候,在清空QListWidge时就会发生 段错误,所以在清空QListWidget之前 应该把链接上的信号和槽解除链接,调用disconnect函数。
在清空完QListWidge之后,我们在把相应的信号和槽链接起来,这样就不会出现段错误了,成功清空了QListWidget
3. QT输出参数到exe并接收参数显示
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>
#include <qprocess.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow){
ui->setupUi(this);
}
MainWindow::~MainWindow(){
delete ui;
}
void MainWindow::on_btnPing_clicked(){
qDebug()<<QStringLiteral("开始点击");
ui->textBrowser->clear();
ui->textBrowser->setText(QStringLiteral("请等待"));
ui->textBrowser->update();
QProcess myProcess(this);
QString program = "C:\\test.exe";
QStringList arguments;
arguments<<"1";//传递到exe的参数
myProcess.start(program,arguments);
while (myProcess.waitForFinished(100) == false) {
QByteArray qByteRead = myProcess.readAllStandardOutput();
if (!qByteRead.isEmpty()) {
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead));
repaint();
}
}
QByteArray qByteRead = myProcess.readAllStandardOutput();
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead));
qDebug()<<QString::fromLocal8Bit(qByteRead);
qDebug()<<"结束点击";
}
p->start("C:\\test.exe");
语句。QProcess::start() 接受两个参数,第一个是要执行的命令或者程序,这里就是 C:\\test.exe;第二个是一个 QStringList 类型的数据,也就是需要传递给这个程序的运行参数。注意,这个程序是需要能够由系统找到的,一般是完全路径。
4. 关于Qt自动补全,无法识别补全父类函数
5. Qt 之 QProgressIndicator(等待提示框)
详见《Qt 之 QProgressIndicator(等待提示框)_一去丶二三里的博客-CSDN博客》
6. 常用动画及图标生成网址
Free Icons, Clipart Illustrations, Photos, and Musichttps://icons8.com/
7. QT中在label中插入图片自适应label大小等比缩放
QImage *img_mainicon;//主图标显示在右上角lable中
img_mainicon =new QImage;//新建一个image对象
img_mainicon->load(":/image/images/haiyan.jpg"); //载入图片到img对象中
img_mainicon->scaled(ui->label_mainicon->size(),Qt::KeepAspectRatio);//把图片
ui->label_mainicon->setScaledContents(true);
ui->label_mainicon->setPixmap(QPixmap::fromImage(*img_mainicon)); //将图片放入label,使用setPixmap,注意指针*img
//ui->label_mainicon->setAlignment(Qt::AlignCenter); //将图片放在label中心,用缩放了就不需要了
KeepAspectRatio:设置pixmap缩放的尺寸保持宽高比。
setScaledContents:设置label的属性scaledContents,这个属性的作用是允许(禁止)label缩放它的内容充满整个可用的空间。
8. Qt tableWidget设置列宽等间距
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
显示内容,居中
table->item(0, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
删除
int rowNum= ui->tableWidget->rowCount();
for(int i = 0 ; i < rowNum ; i++)//清空列表
{
ui->tableWidget->removeRow(0);
}
9. Qt之raise()和lower()
在代码中,raise(),便代表了放在前面的含义;lower()便代表了放在后面的含义。