我正在尝试使用自定义类型发出信号.Type使用Q_DECLARE_METATYPE声明,并使用qRegisterMetaType注册.
当我发出信号时,我得到输出流的下一个错误:
Type "MyType" has id: 1024 ; register status: true
QObject::connect: Cannot queue arguments of type 'MyType' (Make sure 'MyType' is registered using qRegisterMetaType().)
Run Code Online (Sandbox Code Playgroud)
只有在使用排队连接时(当对象位于不同的线程或使用显式时Qt::QueuedConnection
)并且 MyType
在命名空间内声明时,Bug才是可重现的.
示例代码:MyType.h
#define SHOW_BUG
#ifdef SHOW_BUG
namespace NS
{
struct MyType
{
int val;
};
}
Q_DECLARE_METATYPE( NS::MyType );
#else
struct MyType
{
int val;
};
Q_DECLARE_METATYPE( MyType );
#endif
Run Code Online (Sandbox Code Playgroud)
MyClass.h:
#include "MyType.h"
namespace NS
{
class MyClass
: public QObject
{
Q_OBJECT
public:
MyClass( QObject …
Run Code Online (Sandbox Code Playgroud) 我在QSplitter中有QListView和QTabWidget.QListView使用自定义模型和自定义委托.在委托中,我重新实现了paint和sizeHint方法.但是当我调整视图大小时 - 元素的高度不会重新计算.我该如何解决?示例图片:
在谷歌我发现可以从模型中发出layoutChanged,但我只想更新当前视图,因为模型的内容不会改变.
委托代码:
void ChatItemDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
painter->save();
ChatItem *item = static_cast< ChatItem * >( index.internalPointer() );
QTextDocument doc;
doc.setHtml( item->htmlText() );
doc.setTextWidth( option.rect.width() );
QRect clip( 0, 0, option.rect.width(), option.rect.height() );
painter->translate( option.rect.topLeft() );
QColor bgColor = index.row() % 2 ? QColor( 255, 0, 0, 40 ) : QColor( 0, 255, 0, 40 );
painter->fillRect( clip, bgColor );
doc.drawContents( painter, clip );
qDebug() << "paint: " …
Run Code Online (Sandbox Code Playgroud) 有没有办法模糊Qt中的小部件?例如,supose我想创建一个'Loading ...'对话框并模糊背景(非活动窗口).
有没有办法获得当前可见项目的列表QAbstractItemView
?并且,如果可能,接收有关更改此列表的任何通知.
UPD:我问的正是有关QAbstractItemView
或QTreeView
与非普通的结构,而不是QTableView
.
Upd2:我正在用复选框实现树视图模型.我想要下一个行为(检查/取消检查相同):
检查状态由外部数据源监视/修改,因此我需要一种机制来更新所有已更改的子项/父项.dataChanged
信号对我来说还不够,因为构建一个QModelIndex
更新的所有更改列表是非常广泛的.并且根本没有必要,因为将从中挑选所有新数据QAbstractItemModel::data
.
我发现下一个脏黑客更新所有项目:emit dataChanged( QModelIndex(), QModelIndex() );
但它没有记录无效索引.
所以,我需要一种方法来强制所有可见的项目重新绘制内容和新数据.
我正在尝试使用一段代码打开和关闭计算机的CD托盘.我一直在使用MCI命令,并包含winmm.lib
在我的项目配置的其他依赖项中.我已经包括了windows.h
和mmsystem.h
为好.
我正在使用的代码如下:
mciSendCommand(0, MCI_SET, MCI_SET_DOOR_OPEN, NULL);
mciSendCommand(1, MCI_SET, MCI_SET_DOOR_CLOSED, NULL);
Run Code Online (Sandbox Code Playgroud)
代码构建并运行良好,没有CD托盘操作正在进行!任何人都可以建议我如何适应这个?
我正在创建带有复选框的QComboBox.如何防止鼠标点击时视图崩溃?我希望能够设置复选框,但每次单击项目时 - QComboBox的下拉列表都会折叠.
注意:目前我正在调试Qt源并寻找解决方法......
我在Qt Creator的设计模式中设置了工具按钮的工具提示持续时间.该应用程序在Qt Creator中运行得很好.
但是当我使用make然后使用qmake命令在终端命令中运行相同的应用程序时,我得到了与我在设计器模式中添加的每个工具按钮相关的以下错误:
ui_mainwindow.h:377:22: error: ‘class QToolButton’ has no member named ‘setToolTipDuration’ pointButton->setToolTipDuration(200000);
Run Code Online (Sandbox Code Playgroud)
使用make命令时为什么会显示上述错误?如何使用make命令?
int nSize;
QString str;
char *p = new char[nSize];
p = str.toLocal8bit.data();
delete[] p;
Run Code Online (Sandbox Code Playgroud)
当我尝试删除Xcode 5.0.2中的char数组时出现调试错误,但是在Xcode 3.0.2中成功删除了此char数组.