小编Chr*_*ris的帖子

Qt:定义自定义事件类型

我通过继承QEvent在我的Qt应用程序中创建了一个自定义事件.

class MyEvent : public QEvent
{
  public:
    MyEvent() : QEvent((QEvent::Type)2000)) {}
    ~MyEvent(){}
}
Run Code Online (Sandbox Code Playgroud)

为了检查此事件,我在event()方法中使用以下代码:

if (event->type() == (QEvent::Type)2000)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在我的应用程序中的某处定义自定义事件的类型,这样我就不需要在事件方法中强制转换实际的整数.所以在我的event()方法中,我希望能够做类似的事情

if (event->type() == MyEventType)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

有什么想法我可能会在这个代码中做到这一点和在哪里?

c++ qt qt4

16
推荐指数
3
解决办法
2万
查看次数

在C++模板中省略参数

调用模板函数时,可以省略函数名后面的类型吗?

例如,考虑一下这个功能

template <typename T> void f(T var){...};

可以这样简单地调用它:

int x = 5;
F(X);

或者我必须包括类型?

int x = 5;
f <int>(x);

c++ templates

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

静态成员变量和方法

如果我有一个包含静态成员变量的C++类,那么这个变量的访问器方法是否也需要是静态的?此外,如果我内联此方法,是否会出现任何问题?

c++ static

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

无法使用 Python 打开 Visio 文档

我正在尝试使用 Python 在 Visio 中进行一些自动化操作。我可以打开 Visio 应用程序并创建新文档,但无法打开现有文档。这是我正在尝试的代码。

  import win32com.client

  visio = win32com.client.Dispatch("Visio.Application")  # this works
  doc = visio.Documents.Open("C:\Users\username\test.vsd") # nope
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<COMObject <unknown>>", line 3, in OpenEx
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Visio', u'\n\nFile not found.', None, 0, -2032465466), None)
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 visio.Documents.OpenEx 并得到相同的答案。有什么想法吗?

python visio pywin32 win32com

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

重定向QObject :: dumpObjectInfo()

是否有可能获得QObject :: dumpObjectInfo()的输出并通过qDebug通道以外的其他方式显示它?理想情况下,我想将此方法的输出转换为字符串.

c++ qt qt4

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

将指针强制转换为固定大小的数组

我遇到了一些类似于以下内容的代码:

uint8_t* dataPtr = {0};

switch(index)
{
  case 0:
    dataPtr = (uint8_t[32])
    {
        0x33, 0x32, 0x31, 0x30, 0x29, 0x27, 0x38, 0x89,
        0x33, 0x32, 0x31, 0x30, 0x29, 0x27, 0x38, 0x89,
        0x33, 0x32, 0x31, 0x30, 0x29, 0x27, 0x38, 0x89,
        0x33, 0x32, 0x31, 0x30, 0x29, 0x27, 0x38, 0x89,
    }
    break;
  case 1:
    dataPtr = (uint8_t[32])
    {
        0x43, 0x42, 0x41, 0x30, 0x29, 0x27, 0x38, 0x89,
        0x33, 0x22, 0x21, 0x30, 0x29, 0x27, 0x38, 0x89,
        0x33, 0x12, 0x31, 0x30, 0xAF, 0x27, 0x38, 0x89,
        0x33, 0x32, 0x55, …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

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

重写QMessageBox :: paintEvent()

我正在为应用程序创建自定义消息框.我的对象派生自QMessageBox,但我重写了paintEvent()方法以更改其外观.奇怪的是,虽然我没有在派生方法中调用基础paintEvent方法,但默认情况下我的自定义消息框仍然用OK按钮绘制.这是我的代码:


class MessageWidget : public QMessageBox
{
    Q_OBJECT

public:

    MessageWidget(QWidget* parent = 0);
    ~MessageWidget();

    void setTitle(const QString& title);
    const QString& title() const;

protected:

    void paintEvent(QPaintEvent* event);
}

MessageWidget::MessageWidget(QWidget* parent) :
    QMessageBox(parent)
{
    setWindowFlags(Qt::FramelessWindowHint);
    setAutoFillBackground(true);
}

void MessageWidget::paintEvent(QPaintEvent* /*event*/)
{
    QPainter painter(this);
    QRect boxRect = rect();

    QPainterPath path;
    path.addRoundedRect(boxRect, 15, 15);
    painter.fillPath(path, palette().window());
    painter.drawPath(path);

    QRect titleRect = boxRect;
    int titleHeight = fontMetrics().height();
    titleRect.moveBottom(titleHeight);

    boxRect.moveTop(titleRect.bottom());
    painter.drawLine(titleRect.bottomLeft(), titleRect.bottomRight());

    painter.drawText(titleRect, Qt::AlignLeft, "Some Text");
}

当我没有调用基础paintEvent方法时,如何绘制其他东西?

c++ qt qt4

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

标签 统计

c++ ×5

qt ×3

qt4 ×3

arrays ×1

c ×1

pointers ×1

python ×1

pywin32 ×1

static ×1

templates ×1

visio ×1

win32com ×1