Qt常见错误总结

Object::connect: No such slot

  • 检查类是否继承于 QObject
  • 检查类声明的开始处是否添加 Q_OBJECT
  • 检查是否使用 slots 关键字进行槽声明

 

最小化窗口重新打开界面假死/冻结

解决方法:重写showEvent事件即可,这个问题在自定义标题栏的时候遇到过。

void showEvent(QShowEvent *e){
    this->setAttribute(Qt::WA_Mapped);
    QWidget::showEvent(e);
}

 

Qt Lingiust国际化翻译部分地方不起作用

原因:tr的原型是QString QObject::tr(const char * sourceText, const char * disambiguation = 0, int n = -1),即类中如果没有定义Q_OBJECT,tr是不识别的。

解决方法:确保在定义了Q_OBJECT的前提下使用tr()。

 

继承QWidget或其他基类时出现error: 'show' is a private member of 'QWidget'

解决方法:继承的时候忘了加public:,粗心的时候就容易出这个错,且查不到原因

// 继承时一定要加 public !!!
class FS_Color_Dialog : public QColorDialog
{
    Q_OBJECT
public:
    FS_Color_Dialog(QWidget *widget = Q_NULLPTR);
};

 

编译出错:-1: error: [ui_mainwindow.h] Error

解决方法:

  1. 检查程序所在路径是否包含中文,路径要为全英文;
  2. 检查程序所在的文件夹名称,是否含有括号()及其他宽七八糟的符号。比如程序所在的文件夹叫test(02),在windows下可以跑,但在Linux下就会报这个错,并且编译器的输出如下图所示。

 

在Linux下编译qml出现error: Unknown module(s) in QT: qml quick - Qt Creator

解决方案:安装上qtdeclarative5-dev即可,安装指令:

sudo apt install qtdeclarative5-dev

 

使用QSS设置ID选择器时,通过代码新建的控件样式无效

原因:代码生成的控件无默认objectName(),需手动设置objectName()

 

在VS中中文乱码

解决方法,加上下面这一句到cpp中

#pragma execution_character_set("utf-8")

 

继承QDialog后出现setGeometry: Unable to set geometry

原因:父对象几何框架较小不能容纳下子类视图,所以导致了对父对象的重新构造。

解决方法:在构造函数中添加如下代码

this->setWindowFlags(Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint);

 

QComboBox的匿名信号槽实现

connect(ui.comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int index)
{
 // to do
});

 

QWidget::setLayout: Attempting to set QLayout "" on xxx "", which already has a layout

原因:在创建Layout的时候使用了this指针,隐式的设置了这个QWidget的布局

解决方法:设置一遍布局即可

// 错误示范
auto layout = new QHBoxLayput(this);   // 隐式设置布局
this->setLayout(layout);               // 显示设置布局

// 正确做法
auto layout = new QHBoxLayput(this);

//或者
auto layout = new QHBoxLayput; 
this->setLayout(layout); 

 

setAttribute(Qt::WA_DeleteOnClose)导致内存泄露:debug assertion failed _crtisvalidheappointer(block)

原因:定义在栈上的窗口被销毁了两次,退出main方法时,会自动销毁窗口,而setAttribute方法会使得Qt再次销毁窗口,造成二次delete,产生报错。

解决方法:将窗口定义在堆上,如下面代码所示

MainWindow  *w = new MainWindow ; 
w->show();

 

获取到的控件尺寸错误

原因:在构造函数的时候,控件的大小还未确定

解决方法:在构造完成后再获取,或者重载resizeEvent事件。

 

QTableView/QTableWidget安装了事件过滤器无效的问题

原因:QTableView/QTableWidget派生于QAbstractScollArea,过滤器要安装在viewport中

ui->tableView->viewport()->installEventFilter(this);

bool XX类名::eventFilter(QObject* watched, QEvent* e)
{
	if (watched == table->viewport())
	{

    }
}

 

QObject::connect: No such slot xxx

原因:没有在派生类中写Q_OBJECT宏

 

QListWidget在IconMode下使用setItemWidget导致item位置错乱

原因:Item在Layout过程中,代理中updateEditorGeometry采用的style计算的位置有问题

解决方法:为QListWidget设置Delegate,覆写updateEditorGeometry方法(不手动给QListWidget设置Delegate时,QT也会自动给QListWidget设置默认的Delegate)

// CustomDelegate.h
#pragma once
#include <QStyledItemDelegate>
 
class CustomDelegate : public QStyledItemDelegate
{
	Q_OBJECT
public:
	CustomDelegate(QWidget *parent = Q_NULLPTR) { };
	virtual ~CustomDelegate() { };
 
	void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
	{
		editor->setGeometry(option.rect);
	;
};


// 构造函数中
CustomDelegate *delegate = new CustomDelegate(this);
ui->listWidget_Video->setItemDelegate(delegate);

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值