我想将QWidget-container的clicked()信号连接到我的插槽.所以我写了这段代码:
HPP:
class LinkWidget : public QWidget
{
Q_OBJECT
public:
explicit LinkWidget(QWidget * parent = 0 );
~LinkWidget();
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent * event ) ;
};
Run Code Online (Sandbox Code Playgroud)
CPP:
LinkWidget::LinkWidget(QWidget * parent) :
QWidget(parent)
{
}
LinkWidget::~LinkWidget()
{
}
void LinkWidget::mousePressEvent(QMouseEvent * event)
{
emit clicked();
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但我不能再将样式表分配给这个小部件了:
这样可行:
QWidget * statuspanel = new QWidget(this);
statuspanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
statuspanel->setMinimumHeight(20);
statuspanel->setMaximumHeight(20);
statuspanel->setStyleSheet("border-bottom: 1px solid rgb(206, 203, 186);"
"border-right : 1px solid rgb(206, 203, 186);");
Run Code Online (Sandbox Code Playgroud)
那不是:
LinkWidget * statuspanel = new LinkWidget(this); …Run Code Online (Sandbox Code Playgroud) 主线程:
(是的,我现在停止主线程,我现在真的需要它进行测试,这是测试单元.我将在最后阶段在另一个线程中完成所有这些工作.)
码:
function TFreHolder.GetVersion: TFreHolderVersion;
Var
Data : TBArray;
StrLen : Integer;
begin
SetLength(Data, 0);
FFrePro.SendCommand(PROTO_COMVERSION, Data);
ResetEvent(FAsyncMutex);
if (WaitForSingleObject(FAsyncMutex, PROTO_COMMANDTIMEOUT) = WAIT_TIMEOUT) Then
Begin
ShowMessage('Timeout');
ResetEvent(FAsyncMutex);
Exit;
End;
Result.DType := BytesToWord(FActivePackage.User.Parameters, 0);
Result.DVersion := BytesToWord(FActivePackage.User.Parameters, 2);
StrLen := BytesToByte(FActivePackage.User.Parameters, 4);
if StrLen < 32
then Result.DDesc := BytesToString(FActivePackage.User.Parameters, 5)
else Result.DDesc := BytesToString(FActivePackage.User.Parameters, 4);
Run Code Online (Sandbox Code Playgroud)
在COM端口监视线程中:
procedure TFreHolder.CommandSwitcher(Package: TFreProPackage);
...
Begin
FActivePackage := Package;
SetEvent(FAsyncMutex)
End;
...
Run Code Online (Sandbox Code Playgroud)
我总是看到超时消息,但如果我评论Waitforsingleobject我可以看到字节和包来了.
我用这种方式在Constructor中创建了Event:
FAsyncMutex := CreateEvent(Nil, True, False, 'FRE_EVENT');
Run Code Online (Sandbox Code Playgroud)
我的错是什么?在获取结果之前,我需要等待CommandSwitcher函数的调用.
谢谢.