Jelenleg egy dialógus ablak a programom kerete. Úgymond ez a mainframe. Azt szeretném elérni, hogy a programomnak ne legyen kerete, tehát a fölső sáv, amiben az ablak bezáró "x" (close) gombocska megjelenik, ne látszódjon.
Szerintetek van erre mód? Ha igen, hogyan?
Kösz a segítséget!
- 1970 megtekintés
Hozzászólások
Hat, Qt alatt nem tudom hogyan kell, de amit keresel, azt "override redirect"-nek hivja a nativ X konyvtar (lasd alabb, pelda). Ha igy keresel ra' Qt-s doksik kozott?
XSetWindowAttributes xwa;
Window window;
...
window=XCreateWindow(display,...);
xwa.override_redirect=1;
XChangeWindowAttributes(display,window,CWOverrideRedirect,&xwa);
...
XMapWindow(display,window);
...
- A hozzászóláshoz be kell jelentkezni
Szerintem a Qt::WindowFlags enumot keresed. Annak vannak Qt::FramelessWindowHint és Qt::CustomizeWindowHint értékei, amivel meg tudod oldani a keret nélküliséget.
- A hozzászóláshoz be kell jelentkezni
QWidget::setWindowFlags(Qt::WindowFlags)
eljárás és
Qt::FramelessWindowHint
flag a kívánt hatást produkálja.
Hátulütője, hogy ilyenkor az ablakot nem lehet az egérrel mozgatni,
ahhoz (pár napos thread alapján a levlistán) újra kell implementálni
az egérhez tartozó eseménykezelőket (mouseclick, mousemove, stb.)
Szerk.: examples/widgets/windowflags példát nézegesd, elég hasznos! ;)
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Alt+Balklikkel addig is tudja mozgatni.
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam. Tényleg!
Kösz!
- A hozzászóláshoz be kell jelentkezni
Egy régi projectemben ez így néz ki:
MainWindow::MainWindow()
: QWidget(0,Qt::FramelessWindowHint),
m_dragging(false)
{
...
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && event->pos().y()<40)
{
m_dragging=true;
m_lastPos=QCursor::pos();
}
}
void MainWindow::mouseMoveEvent(QMouseEvent* event)
{
if (m_dragging && (event->buttons() & Qt::LeftButton))
{
move(pos()+QCursor::pos()-m_lastPos);
m_lastPos=QCursor::pos();
} else
m_dragging=false;
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
m_dragging=false;
}
Ha az ablak felső 40 pixelére kattintasz, akkor tudod húzgálni.
A .h fájlt szerintem ki tudod találni. :)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Köszönöm a segítségeteket! Este kipróbálom a lehetőségeket.
- A hozzászóláshoz be kell jelentkezni
Azt elfelejtettem említeni, hogy Qt3-ban dolgozom éppen!
Ettől függetlenül nagy segítséget jelentettek a hozzászólásaitok, mert ezek alapján már elboldogultam.
Qt3-ban így lehetett megoldani:
MainFrame::MainFrame(QWidget* parent, const char* name)
: QWidget(parent, name, Qt::WStyle_Customize | Qt::WStyle_NoBorder)
Mivel az ablak mozgatására elvileg nincs igény, ezért a "tr3w" által javasolt ablakmozgatási lehetőséget kihagytam a programból.
Kösz még egyszer!
- A hozzászóláshoz be kell jelentkezni
Csak figyelmeztetes: maskor ird oda, mert a ket Qt kozt nem sok atmenet van API-ban, igy adott problemak megoldasa maskepp nez ki Qt3 mint Qt4 alatt.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Illetve felejtsd el a qt3-at. :)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Nem feltetlen kell elfelejteni, csak szep halkan kell elkezdeni migralni 4-re.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Qt4-ben szoktam programozgatni, de most sajna muszáj elővennem a Qt3-at.
- A hozzászóláshoz be kell jelentkezni