小编Dmi*_*nov的帖子

使用自定义类型发出信号不起作用

我正在尝试使用自定义类型发出信号.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)

qt

8
推荐指数
2
解决办法
1万
查看次数

如何强制QAbstractItemView重新计算项目sizeHints

我在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 qsplitter qlistview

7
推荐指数
1
解决办法
1872
查看次数

在Qt中模糊对QWidget的影响

有没有办法模糊Qt中的小部件?例如,supose我想创建一个'Loading ...'对话框并模糊背景(非活动窗口).

c++ qt

7
推荐指数
2
解决办法
1万
查看次数

如何在QAbstractItemView中获取可见QModelIndex的列表

有没有办法获得当前可见项目的列表QAbstractItemView?并且,如果可能,接收有关更改此列表的任何通知.

UPD:我问的正是有关QAbstractItemViewQTreeView与非普通的结构,而不是QTableView.

Upd2:我正在用复选框实现树视图模型.我想要下一个行为(检查/取消检查相同):

  • 如果选中其中一个复选框 - 则必须检查所有子项
  • 如果选中所有子复选框 - 则也应检查父复选框.父母的父母也一样,等等......

检查状态由外部数据源监视/修改,因此我需要一种机制来更新所有已更改的子项/父项.dataChanged信号对我来说还不够,因为构建一个QModelIndex更新的所有更改列表是非常广泛的.并且根本没有必要,因为将从中挑选所有新数据QAbstractItemModel::data.

我发现下一个脏黑客更新所有项目:emit dataChanged( QModelIndex(), QModelIndex() );但它没有记录无效索引.

所以,我需要一种方法来强制所有可见的项目重新绘制内容和新数据.

model-view-controller qt qmodelindex qabstractitemview

6
推荐指数
2
解决办法
6510
查看次数

试图打开CD托盘

我正在尝试使用一段代码打开和关闭计算机的CD托盘.我一直在使用MCI命令,并包含winmm.lib在我的项目配置的其他依赖项中.我已经包括了windows.hmmsystem.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托盘操作正在进行!任何人都可以建议我如何适应这个?

c++ winapi mci

4
推荐指数
1
解决办法
5683
查看次数

带有复选框的QComboBox

我正在创建带有复选框的QComboBox.如何防止鼠标点击时视图崩溃?我希望能够设置复选框,但每次单击项目时 - QComboBox的下拉列表都会折叠.

注意:目前我正在调试Qt源并寻找解决方法......

qt qcombobox qstandarditemmodel qabstractitemview

4
推荐指数
1
解决办法
1802
查看次数

class QToolButton'没有名为'setToolTipDuration'的成员

我在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命令?

qt

4
推荐指数
1
解决办法
1120
查看次数

如何使用xcode删除mac osx上的char*数组?

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数组.

c++

1
推荐指数
1
解决办法
281
查看次数